<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    let obj = {
        id: 1,
        name: '张三',
        age: 18,
    }

    /* 对象是不可以使用 for of 遍历的， obj is not iterable */
    console.log(obj)

    // let obj1 = new Map(obj);

    /*   for (let key of obj) {
          console.log(key)
      }
   */

    // es6 引入一种新的 数据类型， map(隐射，hash)
    // https://es6.ruanyifeng.com/#docs/set-map

    /* 把map可以理解为一个容器，容器也是使用 key:value方式组织数据
    
    1. 我们的字面量对象类型，但是使用 => 符号作为 key value 的分隔符
    2. map 的设置 set
    3. 或者 get
    4. 判断 has
    5. 删除 delete
    6  清空 clear


    1. map 注意事项: 除了可以使用字符串作为 key 值，还可以使用对象的方式作为key
    2. map 可以使用 for of 遍历

    map 可以理解为加强版的对象。对象是不支持 for of 遍历的

    */
    const map = new Map();
    const keyInfo = {
        name: '学校的消息',
        description: '这个学校是一个非常不错的学校'
    }

    map.set('name', '张三');
    map.set('age', 18);
    map.set('email', 'gogery@163.com');
    map.set(keyInfo, ['武汉大学', '清华大学', '北京大学']);
    map.set('say', function () {
        console.log('hello world');
    })

    console.log(map.get(keyInfo));
    map.get('say')();


    console.log(map.size);

    console.log(map, typeof map);

    console.log(map.get('age'));
    console.log(map.has('age'));
    console.log(map.has('address'));
    map.delete('age');
    console.log(map);
    // map.clear();
    console.log(map);

    console.log(map.size);


    console.log('map 可以使用 for of 遍历');
    for (let [key, value] of map) {
        console.log(key, value);
    }



</script>

</html>